package annotations

const (
	// AnnotationCheckPoint is the annotation used to store a checkpoint for resources.
	// It contains an opaque value that represents the last known reconciled state.
	AnnotationCheckPoint = "elbv2.k8s.aws/checkpoint"

	// AnnotationCheckPointTimestamp is the annotation used to store the last checkpointed time. The value is stored in seconds.
	AnnotationCheckPointTimestamp = AnnotationCheckPoint + "-timestamp"

	// IngressClass
	IngressClass = "kubernetes.io/ingress.class"

	AnnotationPrefixIngress = "alb.ingress.kubernetes.io"
	// Ingress annotation suffixes
	IngressSuffixLoadBalancerName                              = "load-balancer-name"
	IngressSuffixGroupName                                     = "group.name"
	IngressSuffixGroupOrder                                    = "group.order"
	IngressSuffixTags                                          = "tags"
	IngressSuffixIPAddressType                                 = "ip-address-type"
	IngressSuffixScheme                                        = "scheme"
	IngressSuffixSubnets                                       = "subnets"
	IngressSuffixCustomerOwnedIPv4Pool                         = "customer-owned-ipv4-pool"
	IngressSuffixLoadBalancerAttributes                        = "load-balancer-attributes"
	IngressSuffixWAFv2ACLARN                                   = "wafv2-acl-arn"
	IngressSuffixWAFv2ACLName                                  = "wafv2-acl-name"
	IngressSuffixWAFACLID                                      = "waf-acl-id"
	IngressSuffixWebACLID                                      = "web-acl-id" // deprecated, use "waf-acl-id" instead.
	IngressSuffixShieldAdvancedProtection                      = "shield-advanced-protection"
	IngressSuffixSecurityGroups                                = "security-groups"
	IngressSuffixListenPorts                                   = "listen-ports"
	IngressSuffixSSLRedirect                                   = "ssl-redirect"
	IngressSuffixInboundCIDRs                                  = "inbound-cidrs"
	IngressSuffixCertificateARN                                = "certificate-arn"
	IngressSuffixSSLPolicy                                     = "ssl-policy"
	IngressSuffixTargetType                                    = "target-type"
	IngressSuffixBackendProtocol                               = "backend-protocol"
	IngressSuffixBackendProtocolVersion                        = "backend-protocol-version"
	IngressSuffixTargetGroupAttributes                         = "target-group-attributes"
	IngressSuffixHealthCheckPort                               = "healthcheck-port"
	IngressSuffixHealthCheckProtocol                           = "healthcheck-protocol"
	IngressSuffixHealthCheckPath                               = "healthcheck-path"
	IngressSuffixHealthCheckIntervalSeconds                    = "healthcheck-interval-seconds"
	IngressSuffixHealthCheckTimeoutSeconds                     = "healthcheck-timeout-seconds"
	IngressSuffixHealthyThresholdCount                         = "healthy-threshold-count"
	IngressSuffixUnhealthyThresholdCount                       = "unhealthy-threshold-count"
	IngressSuffixSuccessCodes                                  = "success-codes"
	IngressSuffixAuthType                                      = "auth-type"
	IngressSuffixAuthIDPCognito                                = "auth-idp-cognito"
	IngressSuffixAuthIDPOIDC                                   = "auth-idp-oidc"
	IngressSuffixAuthOnUnauthenticatedRequest                  = "auth-on-unauthenticated-request"
	IngressSuffixAuthScope                                     = "auth-scope"
	IngressSuffixAuthSessionCookie                             = "auth-session-cookie"
	IngressSuffixAuthSessionTimeout                            = "auth-session-timeout"
	IngressSuffixJwtValidation                                 = "jwt-validation"
	IngressSuffixTargetNodeLabels                              = "target-node-labels"
	IngressSuffixManageSecurityGroupRules                      = "manage-backend-security-group-rules"
	IngressSuffixMutualAuthentication                          = "mutual-authentication"
	IngressSuffixSecurityGroupPrefixLists                      = "security-group-prefix-lists"
	IngressSuffixlsAttsAnnotationPrefix                        = "listener-attributes"
	IngressLBSuffixMultiClusterTargetGroup                     = "multi-cluster-target-group"
	IngressSuffixLoadBalancerCapacityReservation               = "minimum-load-balancer-capacity"
	IngressSuffixIPAMIPv4PoolId                                = "ipam-ipv4-pool-id"
	IngressSuffixEnableFrontendNlb                             = "enable-frontend-nlb"
	IngressSuffixFrontendNlbScheme                             = "frontend-nlb-scheme"
	IngressSuffixFrontendNlbSubnets                            = "frontend-nlb-subnets"
	IngressSuffixFrontendNlbSecurityGroups                     = "frontend-nlb-security-groups"
	IngressSuffixFrontendNlbListenerPortMapping                = "frontend-nlb-listener-port-mapping"
	IngressSuffixFrontendNlbEipAlloactions                     = "frontend-nlb-eip-allocations"
	IngressSuffixFrontendNlbHealthCheckPort                    = "frontend-nlb-healthcheck-port"
	IngressSuffixFrontendNlbHealthCheckProtocol                = "frontend-nlb-healthcheck-protocol"
	IngressSuffixFrontendNlbHealthCheckPath                    = "frontend-nlb-healthcheck-path"
	IngressSuffixFrontendNlbHealthCheckIntervalSeconds         = "frontend-nlb-healthcheck-interval-seconds"
	IngressSuffixFrontendNlbHealthCheckTimeoutSeconds          = "frontend-nlb-healthcheck-timeout-seconds"
	IngressSuffixFrontendNlbHealthCheckHealthyThresholdCount   = "frontend-nlb-healthcheck-healthy-threshold-count"
	IngressSuffixFrontendNlHealthCheckbUnhealthyThresholdCount = "frontend-nlb-healthcheck-unhealthy-threshold-count"
	IngressSuffixFrontendNlbHealthCheckSuccessCodes            = "frontend-nlb-healthcheck-success-codes"
	IngressSuffixFrontendNlbTags                               = "frontend-nlb-tags"
	IngressSuffixUseRegexPathMatch                             = "use-regex-path-match"
	IngressSuffixTargetControlPort                             = "target-control-port"

	// NLB annotation suffixes
	// prefixes service.beta.kubernetes.io, service.kubernetes.io
	SvcLBSuffixSourceRanges                              = "load-balancer-source-ranges"
	SvcLBSuffixLoadBalancerType                          = "aws-load-balancer-type"
	SvcLBSuffixTargetType                                = "aws-load-balancer-nlb-target-type"
	SvcLBSuffixLoadBalancerName                          = "aws-load-balancer-name"
	SvcLBSuffixScheme                                    = "aws-load-balancer-scheme"
	SvcLBSuffixInternal                                  = "aws-load-balancer-internal"
	SvcLBSuffixProxyProtocol                             = "aws-load-balancer-proxy-protocol"
	SvcLBSuffixProxyProtocolPerTargetGroup               = "aws-load-balancer-proxy-protocol-per-target-group"
	SvcLBSuffixIPAddressType                             = "aws-load-balancer-ip-address-type"
	SvcLBSuffixAccessLogEnabled                          = "aws-load-balancer-access-log-enabled"
	SvcLBSuffixAccessLogS3BucketName                     = "aws-load-balancer-access-log-s3-bucket-name"
	SvcLBSuffixAccessLogS3BucketPrefix                   = "aws-load-balancer-access-log-s3-bucket-prefix"
	SvcLBSuffixCrossZoneLoadBalancingEnabled             = "aws-load-balancer-cross-zone-load-balancing-enabled"
	SvcLBSuffixSSLCertificate                            = "aws-load-balancer-ssl-cert"
	SvcLBSuffixSSLPorts                                  = "aws-load-balancer-ssl-ports"
	SvcLBSuffixSSLNegotiationPolicy                      = "aws-load-balancer-ssl-negotiation-policy"
	SvcLBSuffixBEProtocol                                = "aws-load-balancer-backend-protocol"
	SvcLBSuffixAdditionalTags                            = "aws-load-balancer-additional-resource-tags"
	SvcLBSuffixHCHealthyThreshold                        = "aws-load-balancer-healthcheck-healthy-threshold"
	SvcLBSuffixHCUnhealthyThreshold                      = "aws-load-balancer-healthcheck-unhealthy-threshold"
	SvcLBSuffixHCTimeout                                 = "aws-load-balancer-healthcheck-timeout"
	SvcLBSuffixHCInterval                                = "aws-load-balancer-healthcheck-interval"
	SvcLBSuffixHCProtocol                                = "aws-load-balancer-healthcheck-protocol"
	SvcLBSuffixHCPort                                    = "aws-load-balancer-healthcheck-port"
	SvcLBSuffixHCPath                                    = "aws-load-balancer-healthcheck-path"
	SvcLBSuffixHCSuccessCodes                            = "aws-load-balancer-healthcheck-success-codes"
	SvcLBSuffixTargetGroupAttributes                     = "aws-load-balancer-target-group-attributes"
	SvcLBSuffixSubnets                                   = "aws-load-balancer-subnets"
	SvcLBSuffixEIPAllocations                            = "aws-load-balancer-eip-allocations"
	SvcLBSuffixPrivateIpv4Addresses                      = "aws-load-balancer-private-ipv4-addresses"
	SvcLBSuffixIpv6Addresses                             = "aws-load-balancer-ipv6-addresses"
	SvcLBSuffixALPNPolicy                                = "aws-load-balancer-alpn-policy"
	SvcLBSuffixTargetNodeLabels                          = "aws-load-balancer-target-node-labels"
	SvcLBSuffixLoadBalancerAttributes                    = "aws-load-balancer-attributes"
	SvcLBSuffixLoadBalancerSecurityGroups                = "aws-load-balancer-security-groups"
	SvcLBSuffixManageSGRules                             = "aws-load-balancer-manage-backend-security-group-rules"
	SvcLBSuffixEnforceSGInboundRulesOnPrivateLinkTraffic = "aws-load-balancer-inbound-sg-rules-on-private-link-traffic"
	SvcLBSuffixSecurityGroupPrefixLists                  = "aws-load-balancer-security-group-prefix-lists"
	SvcLBSuffixlsAttsAnnotationPrefix                    = "aws-load-balancer-listener-attributes"
	SvcLBSuffixMultiClusterTargetGroup                   = "aws-load-balancer-multi-cluster-target-group"
	SvcLBSuffixEnablePrefixForIpv6SourceNat              = "aws-load-balancer-enable-prefix-for-ipv6-source-nat"
	SvcLBSuffixSourceNatIpv6Prefixes                     = "aws-load-balancer-source-nat-ipv6-prefixes"
	SvcLBSuffixLoadBalancerCapacityReservation           = "aws-load-balancer-minimum-load-balancer-capacity"
	SvcLBSuffixEnableIcmpForPathMtuDiscovery             = "aws-load-balancer-enable-icmp-for-path-mtu-discovery"
	SvcLBSuffixEnableTCPUDPListener                      = "aws-load-balancer-enable-tcp-udp-listener"
	SvcLBSuffixDisableNLBSG                              = "aws-load-balancer-disable-nlb-sg"
	SvcLBSuffixQUICEnabledPorts                          = "aws-load-balancer-quic-enabled-ports"
)

const (
	QuicEnabledContainersAnnotation = "service.beta.kubernetes.io/aws-load-balancer-quic-enabled-containers"
)
